<?php
/*
http://sdk.entinfo.cn:8060/webservice.asmx?op=Register
-2 	帐号/密码不正确	1.序列号未注册2.密码加密不正确3.密码已被修改4.序列号已注销
-4	余额不足支持本次发送	余额不足
-5	数据格式错误	只能自行调试了。或与技术支持联系
-6	参数有误	看参数传的是否均正常,请调试程序查看各参数
-7	权限受限	该序列号是否已经开通了调用该方法的权限
-8	流量控制错误	
-9	扩展码权限错误	该序列号是否已经开通了扩展子号的权限,把ext这个参数置空。
-10	内容长度长	单字节不能超过1000个字符，双字节不能超过500个字符
-11	内部数据库错误	
-12	序列号状态错误	序列号是否被禁用
-14	服务器写文件失败	
-17	没有权限	如发送彩信仅限于SDK3
-19	禁止同时使用多个接口地址	每个序列号提交只能使用一个接口地址
-20	相同手机号，相同内容重复提交	
-22	Ip鉴权失败	提交的IP不是所绑定的IP
-23	缓存无此序列号信息	
-601	序列号为空，参数错误	
-602	序列号格式错误，参数错误	
-603	密码为空，参数错误	
-604	手机号码为空，参数错误	
-605	内容为空，参数错误	
-606	ext长度大于9，参数错误	
-607	参数错误 扩展码非数字 	
-608	参数错误 定时时间非日期格式	
-609	rrid长度大于18,参数错误 	
-610	参数错误 rrid非数字	
-611	参数错误 内容编码不符合规范	
-623	手机个数与内容个数不匹配	
-624	扩展个数与手机个数数	
-625		定时时间个数与手机个数数不匹配	
-626		rrid个数与手机个数数不匹配	


1.2	参数定义

Sn	软件序列号	是	格式XXX-XXX-XXX-XXXXX
Pwd	密码	是	md5(sn+password) 32位大写密文
Mobile	手机号	是	必填(支持10000个手机号,建议<=5000)多个英文逗号隔开
Content	内容	是	支持长短信(详细请看长短信扣费说明)提交短信记得加签名
Ext	扩展码	否	例如：123（默认置空）
stime	定时时间	否	例如：2010-12-29 16:27:03（非定时置空）
Rrid	唯一标识	否	最长18位，只能是数字或者 字母 或者数字+字母的组合


对接****/
namespace Common\Org\Sms\Driver;
class Entinfosms
{
    public function __construct($setting)
    {
        $this->account = $setting['keyword'];
        $this->password = $setting['password'];
    }

    /**
     * 短信发送接口
     * @return array 结果数组
     */
    public function send($mobile, $msg)
    {
        $flag = 0;
        $params = '';
        //要post的数据
        $argv = array(
            'sn' => $this->account, ////替换成您自己的序列号
            'pwd' => strtoupper(md5($this->account . $this->password)), //此处密码需要加密 加密方式为 md5(sn+password) 32位大写
            'mobile' => $mobile,//手机号 多个用英文的逗号隔开 post理论没有长度限制.推荐群发一次小于等于10000个手机号
            'content' => $msg,//iconv( "GB2312", "gb2312//IGNORE" ,'您好测试短信[XXX公司]'),//'您好测试,短信测试[签名]',//短信内容
            'ext' => '',
            'stime' => '',//定时时间 格式为2011-6-29 11:09:21
            'msgfmt' => '',
            'rrid' => ''
        );
        //构造要post的字符串
        //echo $argv['content'];
        foreach ($argv as $key => $value) {
            if ($flag != 0) {
                $params .= "&";
                $flag = 1;
            }
            $params .= $key . "=";
            $params .= urlencode($value);// urlencode($value);
            $flag = 1;
        }
        $length = strlen($params);
        //创建socket连接
        $fp = fsockopen("sdk.entinfo.cn", 8061, $errno, $errstr, 10) or exit($errstr . "--->" . $errno);
        //构造post请求的头
        $header = "POST /webservice.asmx/mdsmssend HTTP/1.1\r\n";
        $header .= "Host:sdk.entinfo.cn\r\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $header .= "Content-Length: " . $length . "\r\n";
        $header .= "Connection: Close\r\n\r\n";
        //添加post的字符串
        $header .= $params . "\r\n";
        //发送post的数据
        //echo $header;
        //exit;
        fputs($fp, $header);
        $inheader = 1;
        while (!feof($fp)) {
            $line = fgets($fp, 1024); //去除请求包的头只显示页面的返回数据
            if ($inheader && ($line == "\n" || $line == "\r\n")) {
                $inheader = 0;
            }
            if ($inheader == 0) {
                // echo $line;
            }
        }
        //<string xmlns="http://tempuri.org/">-5</string>
        $line = str_replace("<string xmlns=\"http:///\">", "", $line);
        $line = str_replace("</string>", "", $line);
        $result = explode("-", $line);
        // echo $line."-------------";
        if (count($result) > 1) {
            return $result;
        } else {
            return true;
        }
    }


}